{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "233b203a-1a75-4e1f-a022-ad3523989552",
   "metadata": {},
   "source": [
    "Chapter 15\n",
    "\n",
    "# 从邻接矩阵到有向图\n",
    "《线性代数》 | 鸢尾花书：数学不难"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7c0aa49d-7fbc-47e4-a4a9-c1abe77fed6f",
   "metadata": {},
   "source": [
    "这段代码从数学角度出发，完整展示了如何利用一个邻接矩阵构造一个有向图（Directed Graph），并进行可视化和矩阵抽取。在此过程中，它隐含了对图结构 $G = (V, E)$ 的建模，其中 $V$ 是节点集合，$E$ 是有向边的集合。下面详细从数学视角展开说明。\n",
    "\n",
    "---\n",
    "\n",
    "首先，代码中手动定义了一个 $4 \\times 4$ 的邻接矩阵：\n",
    "\n",
    "$$\n",
    "A = \\begin{bmatrix}\n",
    "0 & 1 & 1 & 0 \\\\\n",
    "1 & 0 & 1 & 0 \\\\\n",
    "0 & 0 & 0 & 1 \\\\\n",
    "1 & 0 & 1 & 0 \\\\\n",
    "\\end{bmatrix}\n",
    "$$\n",
    "\n",
    "这个矩阵是一个**非对称矩阵**，即 $A \\ne A^\\top$，说明所表示的是一个**有向图（Directed Graph）**。矩阵 $A_{ij} = 1$ 表示存在一条从节点 $i$ 指向节点 $j$ 的边。比如 $A_{0,1} = 1$ 意味着从节点 0 指向节点 1 有一条边；$A_{1,0} = 1$ 则表示它是互相连通的，但并不表示所有边都成对出现。\n",
    "\n",
    "我们可以把这个邻接矩阵看作一个从集合 $\\{0, 1, 2, 3\\}$ 到自己映射的函数 $A: V \\times V \\to \\{0,1\\}$，定义每对节点是否存在有向边。\n",
    "\n",
    "---\n",
    "\n",
    "接下来，用 `nx.DiGraph(adjacency_matrix)` 创建了一个有向图对象。此时，图的边集合 $E$ 就由矩阵 $A$ 的非零元素定义：\n",
    "\n",
    "$E = \\{ (i, j) \\mid A_{ij} = 1 \\}$。\n",
    "\n",
    "然后用映射字典将节点 $0, 1, 2, 3$ 分别重命名为 `'a', 'b', 'c', 'd'`，这相当于给图的每个顶点赋予更直观的标签。也就是说，原本的节点 $0$ 被标记为 `'a'`，以此类推。\n",
    "\n",
    "---\n",
    "\n",
    "节点的布局位置由一个字典 `pos` 定义，明确指定了每个节点在二维平面上的位置，这与数学上常见的图嵌入（Graph Embedding）思想类似：我们把离散结构嵌入到二维欧几里得空间中便于观察。\n",
    "\n",
    "随后调用 `nx.draw_networkx()` 进行可视化。每个节点都被绘制在平面上，它们之间的有向边用箭头或连接线显示出方向，从而清晰表达出邻接关系。\n",
    "\n",
    "---\n",
    "\n",
    "最后，调用 `nx.adjacency_matrix(directed_G).toarray()` 将图的邻接结构重新转换为 NumPy 数组形式的矩阵 $A$，这一步本质上是把图从结构对象重新映射为代数对象，即从图 $G$ 恢复邻接矩阵 $A$：\n",
    "\n",
    "$$\n",
    "A_{ij} = \\begin{cases}\n",
    "1, & \\text{如果存在一条从节点 } i \\text{ 到节点 } j \\text{ 的边} \\\\\n",
    "0, & \\text{否则}\n",
    "\\end{cases}\n",
    "$$\n",
    "\n",
    "这使我们可以对图进行代数分析，比如求特征值分解、计算图谱、拉普拉斯矩阵、传播路径等，建立从图论结构到线性代数操作的桥梁。\n",
    "\n",
    "---\n",
    "\n",
    "总结一句话：  \n",
    "> 这段代码以邻接矩阵为出发点，构造了一个有向图，通过可视化展现其结构，并重新提取邻接矩阵以便后续代数处理，从而实现图论与矩阵代数之间的互通。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "19e5bd7e-bd17-482e-be3e-000b596a09d0",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7d7c462a-c294-4f88-a4a7-6be0b6aecf17",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "633d0f38-8b87-42ca-abc0-e738d80a67cc",
   "metadata": {},
   "source": [
    "## 定义邻接矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "e53aa32b-f827-44a3-bba3-3927279c3615",
   "metadata": {},
   "outputs": [],
   "source": [
    "adjacency_matrix = np.array([[0, 1, 1, 0],\n",
    "                             [1, 0, 1, 0],\n",
    "                             [0, 0, 0, 1],\n",
    "                             [1, 0, 1, 0]])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0f0820c2-fda1-4f4b-9cbf-e520ac9fa465",
   "metadata": {},
   "source": [
    "## 创建有向图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "52fd8065-1144-4886-afe3-840e57de0ee0",
   "metadata": {},
   "outputs": [],
   "source": [
    "directed_G = nx.DiGraph(adjacency_matrix, nodetype=int)\n",
    "# 用邻接矩阵创建无向图\n",
    "\n",
    "# 构造节点映射\n",
    "mapping = {0: 'a', 1: 'b', 2: 'c', 3: 'd'}\n",
    "\n",
    "# 重命名节点\n",
    "directed_G = nx.relabel_nodes(directed_G, mapping)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "74501c72-2205-46cc-8ddb-8abe91e32e31",
   "metadata": {},
   "source": [
    "## 定义节点坐标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a62cc18d-eb71-4490-8dc0-2731ada91042",
   "metadata": {},
   "outputs": [],
   "source": [
    "pos = {'a':[0, 0], \n",
    "       'b':[1, 0],\n",
    "       'c':[1, 1],\n",
    "       'd':[0, 1]}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9ba47ad7-2bd9-4660-b4af-7d395276aad1",
   "metadata": {},
   "source": [
    "## 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "ced4448e-0ef3-496a-b3d5-9ed907c7c713",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAHiCAYAAAA597/kAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA0q0lEQVR4nO3de3zNhePH8ffZ1twvI3JpUYhyySX6fvn23TnbGHMbQqTmVi5JNyXqK4ouklQi5RaVKJfcL9vOEfEt5ZpKFMJcil3YzC7n8/uj33zJxrDt8znnvJ7/fL87t+/7fLfHefmcy2YzDMMQAAAwlZ/ZAwAAAEEGAMASCDIAABZAkAEAsACCDACABRBkAAAsgCADAGABBBkAAAsIyMuF3G634uPjVapUKdlstoLeBACA1zAMQ6dPn1aVKlXk55f7cXCeghwfH6/g4OB8GwcAgK85dOiQbr755lzPz1OQS5Uqdf7GSpcunT/LAADwAcnJyQoODj7f0tzkKcjZT1OXLl2aIAMAcA2u9JIvb+oCAMACCDIAABZAkAEAsACCDACABRBkAAAsgCADAGABBBkAAAsgyAAAWABBBgDAAggyAAAWQJABALAAggwAgAUQZAAALIAgAwBgAQQZAAALIMgAAFgAQQYAwAIIMgAAFkCQAQCwAIIMAIAFEGQAACyAIAMAYAEEGQAACyDIAABYAEEGAMACCDIAABZAkAEAsIAAswdcj93xSVq87YiOJacp5VymShQJUKXSRdWpUVXVrVLG7HkAgALkbQ2wGYZhXOlCycnJKlOmjJKSklS6dOnC2JWr9Ey3VuyK1+xNB7TjcJIC/GxyG4bchuRnk/xsNmW6Dd11cxn1bl5dbetXUWAATwQAgDfwxAbktaEeFeSElHT1/WiLth1KlJ9Ncl9mefb5jYLLamZ0UwWVCCy8oQCAfOepDchrQz3m0PFUSro6Tf1aO48kSbr8NyJxwyfa/2o7SdLOI0nqNPVrJaSkF8ZMAEABuJoGXHi+JzXAI4KcnulWv4+26FDCWWVd6bvwN1luQ4cSzqrvR1uUnukuoIUAgILiKw3wiCCv2BWvbYcSr/obkS3LbWjboUSt3HU0n5cBAAqarzTAI95lPXvTgVxfL0jdt0WJX81RxslD8i9ZXqUat83xNvxs0uzNBxTVqGqO52/dulXly5dXtWrV8nM6AOAyDhw4oFOnTqlx48a5XuZyDcg4eUiJG+cp7eBOuc+dkX+JIBUNrqfybYbKFnDD+ctdqQFWYPkj5B/ik7TjcFKO34izB7brj4Uvyy+wmCp0eFZBjj5K/XmDzuyKueSybkPafihRu+OTLjp906ZNCg8PV5MmTfTcc88V1N0AAORgxIgRatKkicLDw7Vp06ZLzr9cA9KP/6ajHz2lc/F7VPbeB1Sx6xiVDXlIRlamjKyMiy6bWwOsxPJBXrLtiAL8bDmel/jVXPmXKKub7h+r4rWbq0Sdf+mm+8fJSE/L8fIBfjYt2X5E0v9C3KJFC7lcLknSuXPnCuQ+AABylv2463K51KJFi0vCfLkGJMRNl83mp8rRE1WqURsVq36XStZ1qELUcPkVKX7J5S9sgBVZ/inrY8lpcufwySx3eprSj+5VqUaRsgX87+3sfkWKq1jNZkr5IfaS62S53Vq82qlXuzVTSkrK/07PypIkrVu3TnXq1CmAewEAyMmRI38FMvtxODY2VrGxsSpRooQ6duyo0w26ym3ccMn13BlpSvv9B5W8q5X8i+ftl4C4DUPHkqx74GX5IKecy8zxqQp32hnJcMu/ZNAl5+V0miQZsinhTJpSU1NzPP/s2bM6fPjwde0FAORdWlrOz2impqZq586dCrq1Xc5Bzm5AqfJ5/t9yG9KZcxlXvqBJLB/kEkUCcnwx369oSUk2ZZ1JuOQ6OZ0m/fWifmTLUL35fppmzZqlMWPG6OjRo7LZbDIMQx06dNCiRYsK4F4AAHLSuXNnLV68+PzjcOXKlfXiiy+qT58+CgwM1JB5W3V419EcGlBKsvkp6/TJPP9v+dmkkkUujbtVWP415Eqli8rPdunrB36BRRVY5Xal/rJJRub/PvDtPpeqs/u+zfG2bDabKpUposDAQA0YMEAHDhzQ+++/r0qVKp0/HwBQeLIfdytVqqT3339fBw4c0IABAxQY+NdLkbk24IYiKnpLPaX+vFFZqXl7o1Z2A6zK8kHu1KiqMnP57FnZe3spKyVRxz97Qam/bFbKz1/r+GfPyxZYNMfLZ7kNRTX831veLwzzrFmzNGzYsAK5DwCAnA0bNkyzZs26JMTZLteAoND+MtxZOjbnaZ3evlppB3cq5cf1+mPpG3Kfu/Slyb83wGo84ndZd3xvo3Ydyflt76l7v1HiV3OVceqw/EsEqVTjtjIyzinp63mq9tzy85fzs0kNbi6rJYNbFOJyAMD1ulwDMv48pMSNn/z1OeT01L8+h1ztLpWPePSSzyGb1YC8NtTyryFLUu/m1fXkgh05nle81j0qXuueS04ve+8DF33tNqTe/6xeEPMAAAXocg244cZgVYi68u+Q8IQGWP4pa0lqW7+KGgWXlX8un0W7En8/mxoFl1Vk/cr5vAwAUNB8pQEeEeTAAD/NjG6q4KBiV/0N8fezKTiomGZGNzX9b2ICAPLu2LFjmjRpkmreVl3/1o9e3wBrr7tAUIlALR7UQg2q/vUB8Ct9T7LPb1C1jBYPasHfQwYADxAfH6/Jkyfr3nvvVZUqVfTkk0/q0KFD8stI9foGeMSbui6UnunWyl1HNXvzAW0/lKgAP5uy3IYM/fUN8LPZlOk21DC4rHr/s7oi61e2/L+KAADS8OHD9cYbb5z/OjtPRYoUUUJCgooVK5ZjA9yGIbdh3QZ41Zu6LhQY4KeoRlUV1aiqdscnacn2I/p21y/a/N12dekQqZvLl1RUw6qqWyVvv0oNAGANNWvW1N+PEf39/dW5c2cVK1ZM0qUNWLztiJbHbVT1mrVVoWxpVSpTxGMb4HFBvlDdKmVUt0oZfZa8U0ufG6M3Zg1TyZIlzZ4FALgGDz/8sP7880+NHDny/GlZWVnq3r17jpevW6WMftq0Tv+ZOEClwsP12bp1hTW1QPBcLgDAEpKSkrR06VIVLfq/X+5UvHhxRURE5Hh5wzD00ksvSZLi4uL0+++/F8rOgkKQAQCmS0pKUkREhH7++Wdt2LDh/GvJnTp1uijQF1qxYoV27dp1/utXXnmlULYWFI9+yhoA4PkSExMVERGhX375RTExMWrSpInuvvtu3XHHHWrUqFGO1zEMQy+88IL8/Pzkdrvldrs1Y8YMjRw5Urfccksh34P8wREyAMA0iYmJatWqlfbu3avY2Fg1adLk/Hlt27ZVlSpVcrzeihUrtGPHDrnd7vOnGYbh0UfJBBkAYIqEhAS1bNlSv/76q2JjY9W4ceM8X3fq1KmS/vfXomw2m7KysjRjxgylp6df7qqWxVPWAIBClx3j/fv3KzY2Vg0bNryq648ePVqRkZE6d+6cnn76afXu3VtNmjTRTTfdpBtusO7fPL4cggwAKFSnTp1Sy5YtdfDgQcXFxemuu+666tto2rSpmjZtqjNnzujpp59Wq1atdP/99xfA2sJDkAEAhebUqVMKDw/XoUOHFBcXpwYNGpg9yTIIMgCgUJw8eVLh4eE6fPiw4uLiVL9+fbMnWQpBBgAUuD///FPh4eGKj4+X0+lUvXr1zJ5kOQQZAFCg/vzzT4WFhenYsWNyOp2qW7eu2ZMsiSADAArMH3/8obCwMB0/flxOp1N33nmn2ZMsi88hAwAKxIkTJxQaGqoTJ04Q4zzgCBkAkO+yY3zy5Em5XC7VqVPH7EmWxxEyACBfHT9+XA6HQydPnpTT6STGecQRMgAg3xw7dkyhoaFKTEyUy+VS7dq1zZ7kMQgyACBfHD16VKGhoUpOTpbL5dLtt99u9iSPQpABANft6NGjcjgcOnPmjFwul2rVqmX2JI9DkAEA1yU+Pl4Oh0OpqalyuVyqWbOm2ZM8EkEGAFyzI0eOyOFwKC0tTS6XSzVq1DB7ksciyACAa3L48GE5HA6dO3dOLpdLt912m9mTPBofewIAXLVDhw7JbrcrPT2dGOcTjpABAFclO8ZZWVlyuVy69dZbzZ7kFThCBgDk2e+//y673S63202M8xlHyACAPDl48KAcDocMw5DL5VK1atXMnuRVOEIGAFzRgQMHZLfbJUnr168nxgWAIAMALis7xn5+flq/fr1uueUWsyd5JYIMAMjV/v37FRISooCAALlcLgUHB5s9yWsRZABAjn777TeFhIQoMDCQGBcCggwAuMSvv/4qu92uokWLyuVy6eabbzZ7ktcjyACAi+zbt092u13FihWT0+lU1apVzZ7kEwgyAOC8vXv3ym63q0SJEsS4kBFkAICk/8W4VKlScjqdqlKlitmTfApBBgBoz549CgkJUenSpeV0OlW5cmWzJ/kcggwAPm7Pnj1yOBwKCgqSy+VSpUqVzJ7kkwgyAPiwn3/+WXa7XUFBQYqLi9NNN91k9iSfRZABwEf99NNPstvtKl++vJxOJzE2GUEGAB/0448/ym63q2LFinI6napYsaLZk3weQQYAH7N79245HA7ddNNNio2NVYUKFcyeBBFkAPApP/zwgxwOhypVqqS4uDhibCEEGQB8xK5du+RwOFS1alXFxcXpxhtvNHsSLkCQAcAH7Ny5U6GhoQoODlZMTIzKly9v9iT8DUEGAC+3Y8cOYuwBCDIAeLHt27crNDRU1atXV0xMjMqVK2f2JOSCIAOAl9q2bZvCwsJ02223ad26dcTY4ggyAHihrVu3KiwsTDVq1NC6desUFBRk9iRcAUEGAC/z/fffKywsTLVq1dLatWtVtmxZsychDwgyAHiR7777TuHh4apduzYx9jAEGQC8xJYtWxQeHq46depozZo1KlOmjNmTcBUIMgB4gW+//Vbh4eG68847ibGHIsgA4OG++eYbtWzZUvXq1dOaNWtUunRpsyfhGhBkAPBgmzdvVsuWLVW/fn2tXr1apUqVMnsSrhFBBgAPtWnTJkVERKhhw4ZatWoVMfZwBBkAPNDXX3+tiIgINWrUSCtXriTGXoAgA4CH2bhxo1q3bq0mTZpoxYoVKlmypNmTkA8IMgB4kA0bNqh169a6++67ibGXIcgA4CG++uortWnTRs2aNdOKFStUokQJsychHxFkAPAA69evV5s2bXTPPfdo+fLlKl68uNmTkM8IMgBYnMvlUmRkpJo3b65ly5YRYy9FkAHAwuLi4hQZGakWLVpo6dKlxNiLEWQAsKjY2Fi1a9dO9957r7788ksVK1bM7EkoQAQZACwoJiZG7dq1U0hICDH2EQQZACxm3bp1at++vRwOhxYvXqyiRYuaPQmFgCADgIWsWbNG7du3V2hoqBYtWkSMfQhBBgCLWL16tTp27Kjw8HBi7IMIMgBYwKpVqxQVFaVWrVpp4cKFKlKkiNmTUMgIMgCYbOXKlYqKilJERIQ+//xzYuyjCDIAmGj58uXq1KmT2rRpQ4x9HEEGAJMsW7ZMnTt3Vtu2bbVgwQIFBgaaPQkmIsgAYIKlS5eqS5cuat++vebPn0+MQZABoLB9+eWXuu+++9ShQwd99tlnuuGGG8yeBAsgyABQiBYvXqz77rtPUVFRmjdvHjHGeQQZAArJokWL1K1bN3Xu3FmffPIJMcZFCDIAFIKFCxeqW7duuu+++4gxckSQAaCAff755+revbu6deumuXPnKiAgwOxJsCCCDAAFaMGCBerRo4e6d++uOXPmEGPkiiADQAGZP3++evbsqR49ehBjXBFBBoACMG/ePPXs2VM9e/bU7Nmz5e/vb/YkWBxBBoB89umnn6pXr17q1auXZs2aRYyRJwQZAPLRxx9/rAcffFAPPfSQZs6cSYyRZwQZAPLJ3LlzFR0drejoaM2YMYMY46oQZADIBx999JGio6PVp08fTZ8+XX5+PLzi6vATAwDXafbs2erTp4/69eunDz74gBjjmvBTAwDXYdasWerbt68efvhhTZs2jRjjmvGTAwDXaMaMGerXr58eeeQRTZ06lRjjuvDTAwDXYPr06erfv78GDhyoKVOmEGNcN36CAOAqffDBB3r44Yc1ePBgvffee8QY+YKfIgC4CtOmTdOAAQM0ZMgQTZ48WTabzexJ8BIEGQDyaOrUqRo4cKCGDh2qd955hxgjXxFkAMiDKVOmaPDgwXr88cc1adIkYox8R5AB4AomT56sRx99VE888YTeeustYowCQZAB4DLeffddPfbYY3rqqac0ceJEYowCQ5ABIBdvv/22hg4dqmHDhmnChAnEGAWKIANADiZNmqQnnnhCzzzzjMaPH0+MUeAIMgD8zVtvvaUnn3xSw4cP1+uvv06MUSgIMgBc4M0339RTTz2lESNG6NVXXyXGKDQEGQD+3xtvvKFhw4Zp5MiRGjduHDFGoSLIACBp/PjxevbZZ/XCCy9o7NixxBiFjiAD8Hmvvfaahg8frlGjRumll14ixjAFQQbg01555RWNGDFCL774osaMGUOMYRqCDMBnjRs3Ts8//7xGjx6t0aNHmz0HPo4gA/BJL7/8sl544QWNGTNGL774otlzAIIMwPeMGTNGo0aN0ssvv6xRo0aZPQeQJAWYPQAACtPo0aM1ZswYjRs3TiNHjjR7DnAeQQbgEwzD0OjRo/XSSy+dfyMXYCUEGYDXMwxDo0aN0tixY89/xAmwGoIMwKsZhqH//Oc/GjdunMaPH69nnnnG7ElAjggyAK9lGIaef/55vfrqq+d/LSZgVQQZgFcyDEMjRozQ66+/fv4PRgBWRpABeB3DMPTcc89p/Pjxmjhxop588kmzJwFXRJABeBXDMPTss89qwoQJmjRpkh5//HGzJwF5QpABeA3DMDRs2DBNnDhR77zzjh577DGzJwF5RpABeAXDMPT000/rrbfe0rvvvqshQ4aYPQm4KgQZgMczDENPPvmk3n77bU2ePFmPPvqo2ZOAq0aQAXg0wzD0xBNP6J133tGUKVM0aNAgsycB14QgA/BYhmFo6NChmjx5st5//30NGDDA7EnANSPIADySYRgaMmSIpkyZomnTpumRRx4xexJwXQgyAI/jdrs1ZMgQTZ06VR9++KH69+9v9iTguhFkAB7F7Xbr0Ucf1bRp0zR9+nT169fP7ElAviDIADyG2+3WoEGD9OGHH2r69Onq27ev2ZOAfEOQAXgEt9utAQMGaMaMGZo5c6Z69+5t9iQgXxFkAJbndrv1yCOPaObMmZo1a5aio6PNngTkO4IMwNLcbrf69++v2bNn66OPPtKDDz5o9iSgQBBkAJaVlZWl/v37a86cOZozZ4569epl9iSgwBBkAJaUlZWlfv36ae7cuZo7d6569uxp9iSgQBFkAJaTlZWlPn366JNPPtHHH3+sHj16mD0JKHAEGYClZGVlqXfv3po3b54+/fRTde/e3exJQKEgyAAsIzMzU9HR0Zo/f74+/fRTdevWzexJQKEhyAAsITMzUw899JAWLFigefPmqWvXrmZPAgoVQQZguszMTD344IP64osvNH/+fHXp0sXsSUChI8gATJWZmakHHnhAixYt0vz589W5c2ezJwGmIMgATJORkaEHHnhAixcv1oIFC9SpUyezJwGmIcgATJGRkaEePXpo6dKl+uKLL9SxY0ezJwGmIsgACl1GRobuv/9+LVu2TF988YU6dOhg9iTAdAQZQKFKT0/X/fffr+XLl2vhwoVq37692ZMASyDIAApNenq6unXrplWrVmnRokVq166d2ZMAyyDIAApFenq6unbtqtWrV2vx4sWKjIw0exJgKQQZQIE7d+6cunbtqrVr12rJkiVq06aN2ZMAyyHIAArUuXPn1KVLF8XExGjJkiVq3bq12ZMASyLIAApMWlqaunTpotjYWH355ZeKiIgwexJgWQQZQIFIS0tT586d5XQ6tXTpUrVq1crsSYClEWQA+S4tLU2dOnWSy+XSsmXLFB4ebvYkwPIIMoB8dfbsWUVFRWnDhg1avny5wsLCzJ4EeASCDCDfnD17Vh07dtTGjRu1fPlyhYaGmj0J8BgEGUC+SE1NVceOHbVp0yatXLlSdrvd7EmARyHIAK5bamqqOnTooM2bN2vlypUKCQkxexLgcQgygOuSkpKi9u3b69tvv9WqVav073//2+xJgEciyACuWUpKitq1a6ctW7Zo1apVuvfee82eBHgsggzgmqSkpKht27b6/vvvtXr1av3rX/8yexLg0QgygKt25swZtW3bVlu3btXq1avVokULsycBHo8gA7gqZ86cUWRkpLZv3641a9aoefPmZk8CvAJBBpBnp0+fVmRkpHbs2KE1a9bon//8p9mTAK9BkAHkSXJy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",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (6,6))\n",
    "nx.draw_networkx(directed_G, pos = pos, node_size = 188, with_labels=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "32a7f1da-9503-4634-ae7b-ec982967cc9b",
   "metadata": {},
   "source": [
    "## 邻接矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "52210193-96bb-4b37-b0fa-13c8dd17ecad",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0, 1, 1, 0],\n",
       "       [1, 0, 1, 0],\n",
       "       [0, 0, 0, 1],\n",
       "       [1, 0, 1, 0]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = nx.adjacency_matrix(directed_G).toarray()\n",
    "A"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "07008496-14ff-4e92-8056-e424174dacb8",
   "metadata": {},
   "source": [
    "作者\t**生姜DrGinger**  \n",
    "脚本\t**生姜DrGinger**  \n",
    "视频\t**崔崔CuiCui**  \n",
    "开源资源\t[**GitHub**](https://github.com/Visualize-ML)  \n",
    "平台\t[**油管**](https://www.youtube.com/@DrGinger_Jiang)\t\t\n",
    "\t\t[**iris小课堂**](https://space.bilibili.com/3546865719052873)\t\t\n",
    "\t\t[**生姜DrGinger**](https://space.bilibili.com/513194466)  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
